# @Time : 2024-11-02 17:37
# @Author : Fioman 
# @Phone : 13149920693
"""
Multiprocessing.Queue 进程安全的queue,可以用来多个进程之间进行交互数据
支持多生产者,多消费者模式,线程安全
"""
import multiprocessing
import time


def producer(q: multiprocessing.Queue, item):
    print("进程1生产 {}".format(item))
    q.put("{}".format(item))
    time.sleep(1)
    print("进程1生产 {}".format(item))
    q.put("{}".format(item))
    time.sleep(1)
    print("进程1生产 {}".format("Done"))
    q.put("Done")
    print("进程1结束")


def consumer(q: multiprocessing.Queue):
    while True:
        item = q.get()  # 不会阻塞,所以消费者任务一般是一个循环等待任务
        if item is None:
            continue
        print("进程2消费 {}".format(item))
        if item == "Done":
            break
    print("进程2 结束")


if __name__ == '__main__':
    q = multiprocessing.Queue()
    p1 = multiprocessing.Process(target=producer, args=(q, "你好"))
    p2 = multiprocessing.Process(target=consumer, args=(q,))

    p1.start()
    p2.start()
    p1.join()
    p2.join()
